home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
m_fnt16
/
s
/
f_etc.bas
< prev
next >
Wrap
BASIC Source File
|
1994-06-01
|
29KB
|
822 lines
10000 ' F_ETC.BAS
10010 ' by TEMITORAVIOS
10020 '
10030 CLEAR ,,,,1024 'プロシージャ
10040 DEFINT A-Z
10050 PALETTE 0,[3*16,2*16,3*16]
10060 PALETTE 1,[5*16,3*16,4*16]
10070 '-- JIS コードから ファイル内の順番に
10080 DIM ADR_OFS(8) '$2020-$3020部分 変換用
10090 FOR I = 0 TO 7
10100 READ OF
10110 ADR_OFS(I) = OF*32*8
10120 NEXT
10130 DATA 0,2,0,0, -3,-2,-3,-4
10140 '
10150 DEF FNADRS#(N#)=((N# \ &H1000)-2)*1536+(((N# \ 32) AND 3)-1)*512+((N# \256)AND 15)*32+(N# AND 31)
10160 '$2020-$3020 , 7060-707f etc 部分 調整
10170 DEF FNADR&(N#) = FNADRS#(N#) + (&H3020 <= N#)*512 + (N#<&H3020)*-ADR_OFS( (((N# \32) MOD 4)-1)*2 -((N# AND &H0800)<>0) ) + ((N# AND &H7860) = &H7060)*768
10180 DEF FNSFT#(C#)= (((C# \ 256)+&HE1) \ 2) * 256 + (&H5F00<=C#)*-&H4000 + (C# MOD 256)+ ((C# MOD 512) < &H121)*-126 + (&H121 <= (C# MOD 512))*-&H1F - (&H160 <= (C# MOD 512))
10190 '
10200 *MENU
10210 DATA "=== F_ETC.BAS ===
10220 DATA "
10230 DATA "M_FNT16に関連したおまけを集めたものです。
10240 DATA "
10250 DATA "
10260 DATA "1 .. フォント表示確認用ファイル作成
10270 DATA "2 .. FNT16 font file 格納順表示
10280 DATA "3 .. DOS/V font file 内容表示
10290 DATA "4 .. 半角 DOS/V フォント変換
10300 DATA "5 .. 漢字ROM内容ファイル化
10310 DATA "6 .. 終了
10320 DATA *
10330 CLS
10340 RESTORE *MENU
10350 GOSUB *MES_PRINT
10360 I$ = INPUT$(1)
10370 ON VAL(I$) GOSUB *MKDAT,*FNT16_DUMP,*FONTEX_DUMP,*FONTEX_CNV,*ROM_FILE,*QUIT
10380 GOTO *MENU
10390 '
10400 '---------------------------------------------------------------------------
10410 *NO_WORK
10420 RETURN
10430 '---------------------------------------------------------------------------
10440 *MKDAT
10450 DATA "=== フォント表示確認用ファイル作成 ===
10460 DATA "DOS/V 用に 同様のファイルが添付されているソフトがあるのですが,
10470 DATA "フォントを変更するシステムでの確認用に便利なものなので,同様の
10480 DATA "ファイルを作成するもの作りました。
10490 DATA "------------------------------------------------------------
10500 DATA " : 00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F
10510 DATA "8140: 、 。 , . ・ : ; - ? ! ゛ ゜ ´ ` ¨ ^
10520 DATA "8150:  ̄ _ ヽ ヾ ゝ ゞ 〃 仝 - 々 〆 〇 ー ― ‐ / \
10530 DATA "8160: ~ ∥ | … ‥ ‘ ’ “ - ” ( ) 〔 〕 [ ] {
10540 DATA "8170: } 〈 〉 《 》 「 」 『 - 』 【 】 + - ± ×
10550 DATA "8180: ÷ = ≠ < > ≦ ≧ ∞ - ∴ ♂ ♀ ° ′ ″ ℃ ¥
10560 DATA "8190: $ ¢ £ % # & * @ - § ☆ ★ ○ ● ◎ ◇ ◆
10570 DATA "------------------------------------------------------------
10580 DATA "作成に 2:15 ぐらいかかります。
10590 DATA "all_knj.dat を カレントディレクトリに作成します。
10600 DATA " [ESC] ... 中止 [CR] ... 作成開始
10610 DATA *
10620 RESTORE *MKDAT
10630 GOSUB *MES_PRINT
10640 I$ = INPUT$(1)
10650 IF I$ = CHR$(27) THEN GOTO *MKDAT_T
10660 TIME$ = "00:00:00"
10670 O_FILE$ = "ALL_KNJ.DAT"
10680 ON ERROR GOTO *F_KILL
10690 OPEN "O",#1,O_FILE$
10700 ON ERROR GOTO 0
10710 PRINT #1," : 00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F "
10720 PRINT " : 00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F "
10730 FOR C1=&H81 TO &HFF
10740 FOR C2=&H40 TO &HFF STEP 16
10750 L$ = HEX$(C1*256 + C2)+": "
10760 FOR C3 = 0 TO 15
10770 L$ = L$+CHR$(C1)+CHR$(C2+C3)+" "
10780 IF C3 = 7 THEN L$=L$+"- "
10790 NEXT
10800 PRINT #1,L$
10810 PRINT L$
10820 NEXT
10830 NEXT
10840 CLOSE #1
10850 PRINT
10860 PRINT "作業時間 = ";TIME$
10870 STOP
10880 *MKDAT_T
10890 RETURN
10900 '
10910 *F_KILL
10920 KILL O_FILE$
10930 RESUME
10940 '
10950 '-----------------------------------------------------------------------------
10960 *FNT16_DUMP
10970 DATA "=== FNT16 font file 格納順表示 ===
10980 DATA "FNT16 で使用する フォントファイルを フォントデータの格納順に表示しま
10990 DATA "す。 (f_put.rex がカレントディレクトリにないと表示が遅くなります。)
11000 DATA "漢字ROMの格納順なんでしょうか? JISコードで 32文字がひとつの単位になっ
11010 DATA "ているようです。 詳しくは about.doc をみてください.
11020 DATA "どういう順番なのか(作り始めてからも勘違いに気付いたり)三週間くらい悩
11030 DATA "みました。 役には立ちませんが おまけということで...
11040 DATA " [ESC] で表示を中断します。
11050 DATA *
11060 RESTORE *FNT16_DUMP
11070 GOSUB *MES_PRINT
11080 PRINT "表示するファイルファイル (fnt16形式)を指定してください."
11090 DIM BUF%(300000/2 - 1)
11100 FL_RDWT = 0
11110 GOSUB *FL_NAME
11120 IF FL_NAME$ = "-" THEN GOTO *FNT16_T
11130 LOAD@ FL_NAME$,BUF%
11140 F& = VARPTR(BUF%(0))
11150 NX = 32: NY = 24
11160 KX = 18: KY = 18
11170 CLS
11180 FOR I = 1 TO 7808 STEP NX*NY
11190 XX = 48
11200 LINE (0,0)-(639,479),PSET,0,BF
11210 FOR J = 0 TO NY-1
11220 YY = J*KY
11230 SYMBOL (0,YY),RIGHT$(" "+STR$(I+ J*NX ),4)+":",1,1
11240 GOSUB *FNT_PUT
11250 F& = F& + 32*NX
11260 IF INKEY$ = CHR$(27) THEN GOTO *FNT16_T
11270 NEXT
11280 LOCATE 0,24
11290 PRINT " [ESC] .. 中止 [CR] .. 続行";
11300 I$ = INPUT$(1)
11310 IF I$ = CHR$(27) THEN GOTO *FNT16_T
11320 NEXT
11330 LOCATE 0,24
11340 PRINT " 表示終了 [CR] ";
11350 I$ = INPUT$(1)
11360 *FNT16_T
11370 ERASE BUF%
11380 RETURN
11390 '-----------------------------------------------------------------------------
11400 *FNT_PUT
11410 IF REX_FLG = 1 THEN
11420 Z& = INT((YY*1024 + XX)/2)
11430 N& = NX
11440 S& = KX/2
11450 C& = 15
11460 B& = 1
11470 CALLM 0,F&,N&,Z&,S&,C&,B&
11480 ELSE IF REX_FLG = -1 THEN
11490 S& = VARPTR(GR%(0))
11500 FOR Z = 0 TO NX -1
11510 FOR FP_I = 0 TO 31
11520 POKE S&+FP_I , PEEK(F&+Z*32+FP_I)
11530 NEXT
11540 LINE (XX+Z*KX,YY)-STEP(15,15),PSET,%1,BF
11550 PUT@ (XX+Z*KX,YY)-(XX+15+Z*KX,YY+15),GR%
11560 NEXT
11570 ELSE
11580 REX_FLG = 1
11590 ON ERROR GOTO *LD_ER
11600 LOADM "f_put.rex",0
11610 ON ERROR GOTO 0
11620 GOTO *FNT_PUT
11630 ENDIF
11640 RETURN
11650 *LD_ER
11660 REX_FLG = -1
11670 DIM GR%(20)
11680 RESUME NEXT
11690 '
11700 '-----------------------------------------------------------------------------
11710 *FONTEX_DUMP
11720 DATA "=== DOS/V font file 内容表示 ===
11730 DATA "DOS/V 用の フォントファイルの内容を表示します。 16x16 全角のみ
11740 DATA "こっちの格納形式は 本に全て載っていたので簡単に分かりました。
11750 DATA "f_put.rex が カレントディレクトリにないと表示が遅くなります。
11760 DATA "[ESC]で中断します。
11770 DATA *
11780 RESTORE *FONTEX_DUMP
11790 GOSUB *MES_PRINT
11800 PRINT "表示するファイルファイル (FONTX形式)を指定してください."
11810 DIM BUF%(300000/2)
11820 FL_RDWT = 0
11830 GOSUB *FL_NAME
11840 IF FL_NAME$ = "-" THEN GOTO *FONTEX_T
11850 LOAD@ FL_NAME$,BUF%
11860 AD_DOSV& = VARPTR(BUF%(0))
11870 ' ID check
11880 I$ = ""
11890 FOR I = 0 TO 5
11900 I$ = I$ + CHR$(PEEK(AD_DOSV& + I))
11910 NEXT
11920 IF I$ <> "FONTX2" THEN
11930 PRINT "FONTEX用フォントではありません。"
11940 GOTO *FONTEX_T
11950 ENDIF
11960 ' FONT NAME
11970 I$ = ""
11980 FOR I = 6 TO 13
11990 I$ = I$ + CHR$(PEEK(AD_DOSV& + I))
12000 NEXT
12010 PRINT "FONT NAME =" + I$
12020 ' FONT SIZE check
12030 IF PEEK(AD_DOSV&+14) <> 16 OR PEEK(AD_DOSV&+15) <> 16 THEN
12040 PRINT "フォントのサイズが違います。"
12050 PRINT " (X = "; PEEK(AD_DOSV&+14);" Y = ";PEEK(AD_DOSV&+15);")"
12060 GOTO *FONTEX_T
12070 ENDIF
12080 ' FONT TYPE
12090 IF PEEK(AD_DOSV&+16) = 0 THEN
12100 PRINT "半角のフォントファイルです。"
12110 GOTO *FONTEX_T
12120 ENDIF
12130 '
12140 ' 領域テーブル個数
12150 TBL_MAX = PEEK(AD_DOSV& + 17)
12160 AD_DOSV& = AD_DOSV& +18
12170 '
12180 ' フォント数カウント (領域テーブル読み込み)
12190 FT_CNT# = 0
12200 FOR I = 0 TO TBL_MAX -1
12210 CD_TOP# = PEEK(AD_DOSV&+1)*256 + PEEK(AD_DOSV&+0)
12220 CD_BTM# = PEEK(AD_DOSV&+3)*256 + PEEK(AD_DOSV&+2)
12230 FT_CNT# = FT_CNT# + CD_BTM# - CD_TOP# +1
12240 AD_DOSV& = AD_DOSV& + 4
12250 NEXT
12260 F& = AD_DOSV&
12270 NX = 32: NY = 24
12280 KX = 18: KY = 18
12290 CLS
12300 FOR I = 1 TO FT_CNT# STEP NX*NY
12310 XX = 48
12320 LINE (0,0)-(639,479),PSET,0,BF
12330 FOR J = 0 TO NY-1
12340 YY = J*KY
12350 SYMBOL (0,YY),RIGHT$(" "+STR$(I+J*NX),4)+":",1,1
12360 GOSUB *FNT_PUT
12370 F& = F& + 32*NX
12380 IF INKEY$ = CHR$(27) THEN GOTO *FONTEX_T
12390 NEXT
12400 LOCATE 0,24
12410 PRINT " [ESC] .. 中止 [CR] .. 続行";
12420 I$ = INPUT$(1)
12430 IF I$ = CHR$(27) THEN GOTO *FONTEX_T
12440 NEXT
12450 LOCATE 0,24
12460 PRINT " 表示終了 [CR] ";
12470 I$ = INPUT$(1)
12480 *FONTEX_T
12490 ERASE BUF%
12500 RETURN
12510 '-----------------------------------------------------------------------------
12520 *FONTEX_CNV
12530 DATA "=== 半角 DOS/V フォント変換 ===
12540 DATA "DOS/V用 8 x 16 ドットの半角フォントファイルを FNT16 で利用できる形に
12550 DATA "変換します
12560 DATA "実はフォントサイズが同じファイルの 頭の17バイトを削除するだけで使える
12570 DATA "のですが、$00-$1Fなどの内容が違うので その部分のフォントを利用するソフ
12580 DATA "ト(WINKの CR表示等)では,表示がおかしくなるので、
12590 DATA "$20-7E,$A0-$DF の部分のみを複写するようにします。
12600 DATA " ($80-$9f,$e0-$ff は空白になります。)"
12610 DATA *
12620 RESTORE *FONTEX_CNV
12630 GOSUB *MES_PRINT
12640 DIM TOWN%(4096/2-1),DOSV%((4096+17)/2),GRPH%(16*16/2)
12650 PRINT "変換元のファイルを指定してください."
12660 FL_RDWT = 0
12670 GOSUB *FL_NAME
12680 IF FL_NAME$ = "-" THEN GOTO *FONTEX_CNV_T
12690 LOAD@ FL_NAME$,DOSV%
12700 CLS
12710 LOCATE 0,18
12720 TOWN& = VARPTR(TOWN%(0))
12730 DOSV& = VARPTR(DOSV%(0))+17
12740 GRPH& = VARPTR(GRPH%(0))
12750 KX = 16 : KY = 16
12760 FOR X = 0 TO 15
12770 IF X < 2 THEN
12780 GOSUB *SYM
12790 ELSE IF 2 <= X AND X <= 7 THEN
12800 GOSUB *CNV
12810 ELSE IF 8 <= X AND X <= 9 THEN
12820 GOSUB *CLR
12830 ELSE IF 10 <= X AND X <= 13 THEN
12840 GOSUB *CNV
12850 ELSE
12860 GOSUB *CLR
12870 ENDIF
12880 FOR Y = 0 TO 15
12890 FOR I = 0 TO 15
12900 POKE TOWN& + X*256 + Y*16 + I ,PEEK(GRPH& + Y*16 + I)
12910 NEXT
12920 NEXT
12930 NEXT
12940 PRINT "出力先のファイルを指定してください."
12950 PRINT " ('-' のみで中止)"
12960 FL_RDWT = 1
12970 GOSUB *FL_NAME
12980 IF FL_NAME$ <> "-" THEN
12990 SAVE@ FL_NAME$,TOWN%
13000 ENDIF
13010 *FONTEX_CNV_T
13020 ERASE TOWN%,DOSV%,GRPH%
13030 RETURN
13040 *CNV
13050 GRPH& = VARPTR(GRPH%(0))
13060 FOR Y = 0 TO 15
13070 FOR I = 0 TO 15
13080 POKE GRPH& + Y*16 + I, PEEK(DOSV& + X*256 + Y*16 + I)
13090 NEXT
13100 NEXT
13110 IF X <> 7 THEN
13120 PUT@ (KX*X,0)-(KX*X+7,KY*15+15),GRPH%
13130 ELSE '$7f の処理
13140 PUT@ (KX*X,0)-(KX*X+7,KY*14+15),GRPH%
13150 SYMBOL(KX*7,KY*15),CHR$(&H7F),1,1
13160 GET@ (KX*X,0)-(KX*X+7,KY*15+15),GRPH%
13170 ENDIF
13180 RETURN
13190 *SYM
13200 FOR Y = 0 TO 15
13210 SYMBOL (KX*X,KY*Y),CHR$(X*16+Y),1,1
13220 NEXT
13230 GET@ (KX*X,0)-(KX*X+7,KY*15+15),GRPH%
13240 RETURN
13250 *CLR
13260 FOR Y = 0 TO 15
13270 FOR I = 0 TO 15
13280 POKE GRPH& + Y*16 + I , 0
13290 NEXT
13300 LINE (X*KX,Y*KY)-STEP(7,15),PSET,7,B
13310 NEXT
13320 RETURN
13330 '-----------------------------------------------------------------------------
13340 *ROM_FILE
13350 DATA "=== 漢字ROM内容ファイル化 ===
13360 DATA "TOWNS の漢字ROMと同じ内容の、フォントファイルを作ります。
13370 DATA "(作成されたファイルには,富士通の著作権があります.)
13380 DATA "横に1ドットずらして重ねた太文字にすることができます。
13390 DATA "M_FNT16 の複写の元に便利でしょう。
13400 DATA "TROM16.FNT をカレントディレクトリに作成します。
13410 DATA "作成に 4:19 (太文字は 6:37) ぐらいかかります.
13420 DATA *
13430 RESTORE *ROM_FILE
13440 GOSUB *MES_PRINT
13450 I$ = ""
13460 PRINT " [<=][=>] .. 選択 [CR] .. 実行 [ESC] .. 中止"
13470 WHILE I$ <> CHR$(13) AND I$ <> CHR$(27)
13480 IF BOLD = 0 THEN
13490 PRINT CHR$(13)+"[ 通常文字 ] 太 文 字 "+CHR$(13);
13500 ELSE
13510 PRINT CHR$(13)+" 通常文字 [ 太 文 字 ]"+CHR$(13);
13520 ENDIF
13530 I$ = INPUT$(1)
13540 IF (INSTR("46"+CHR$(&H1D)+CHR$(&H1C),I$) <> 0) THEN
13550 BOLD = -(BOLD = 0)
13560 ENDIF
13570 WEND
13580 IF I$ = CHR$(27) THEN GOTO *ROM_FILE_T
13590 '
13600 '
13610 TIME$ = "00:00:00"
13620 CLS
13630 LOCATE 0,20 : PRINT " === 作業中 ==="
13640 DIM TOWN%(249856/2 - 1),GT%(16*16)
13650 H = &H28 : OF = -&H800
13660 FOR L = &H20 TO &H7F STEP 16
13670 GOSUB *F_GET
13680 NEXT
13690 OF = 0
13700 FOR H = &H21 TO &H27
13710 IF (H MOD 16) < 8 THEN
13720 FOR L = &H20 TO &H7F STEP 16
13730 GOSUB *F_GET
13740 NEXT
13750 ELSE
13760 H = H + 8
13770 ENDIF
13780 NEXT
13790 FOR H = &H30 TO &H6F
13800 FOR L = &H20 TO &H7F STEP 16
13810 GOSUB *F_GET
13820 NEXT
13830 NEXT
13840 FOR H = &H70 TO &H73
13850 FOR L = &H20 TO &H7F STEP 16
13860 GOSUB *F_GET
13870 NEXT
13880 NEXT
13890 H = &H74 : L = &H20
13900 GOSUB *F_GET
13910 '7426
13920 O_FILE$ = "TROM16.fnt"
13930 ON ERROR GOTO *F_KILL
13940 SAVE@ O_FILE$,TOWN%
13950 ON ERROR GOTO 0
13960 ERASE TOWN%,GT%
13970 LOCATE 0,20:PRINT " === 作業終了 ==="
13980 PRINT "作業時間 =";TIME$
13990 *ROM_FILE_T
14000 RETURN
14010 '
14020 *F_GET
14030 LINE (FX*17,0)-(FX*17+16,479),PSET,0,BF
14040 FOR FY= 0 TO 15
14050 SJ_CODE# = FNSFT#(H*256 + L + FY)
14060 IF BOLD = 0 THEN
14070 SYMBOL (FX*17,FY*16),CHR$(SJ_CODE# \ 256)+CHR$(SJ_CODE# MOD 256),1,1
14080 ELSE
14090 SYMBOL (FX*17,FY*16),CHR$(SJ_CODE# \ 256)+CHR$(SJ_CODE# MOD 256),1,1,,,,1
14100 ENDIF
14110 NEXT
14120 GET@ (FX*17,0)-(FX*17+15,15*16+15),GT%
14130 PT# = FNADR&(H*256 + L + OF)*32/2
14140 FOR I = 0 TO 255
14150 TOWN%(PT#+ I) = GT%(I)
14160 NEXT
14170 FX = FX + 1: IF FX = 37 THEN FX = 0
14180 RETURN
14190 '-----------------------------------------------------------------------------
14200 *QUIT
14210 DATA "=== 終了 ===
14220 DATA "終了します.
14230 DATA " [RET] 実行 [ESC] 中止
14240 DATA *
14250 RESTORE *QUIT
14260 GOSUB *MES_PRINT
14270 I$ = INPUT$(1)
14280 IF I$ = CHR$(13) THEN
14290 END
14300 ELSE
14310 RETURN
14320 ENDIF
14330 '-----------------------------------------------------------------------------
14340 *MES_PRINT
14350 PRINT
14360 READ D$:WHILE D$ <>"*"
14370 PRINT D$
14380 READ D$:WEND
14390 PRINT
14400 RETURN
14410 '---- ファイル名入力 -------------------------------------------------------
14420 *FL_NAME
14430 ' in fL_rdwt , fl_def$
14440 ' out fl_name$
14450 '
14460 IF FL_CDIR$ = "" THEN FL_CDIR$ = ".\"
14470 '
14480 *FL_NAME2
14490 PRINT FL_CDRV$ + FL_CDIR$+">";
14500 LINE INPUT FL_CLINE$
14510 '
14520 '入力で \ のかわりに / で入力できるように
14530 FOR FL_I = 1 TO LEN(FL_CLINE$)
14540 IF MID$(FL_CLINE$,FL_I,1) = "/" THEN MID$(FL_CLINE$,FL_I,1) = "\"
14550 NEXT
14560 '
14570 GOSUB *FL_PRM
14580 '
14590 'default
14600 IF FL_PRM$ = "" THEN
14610 IF FL_DEF$ <> "" THEN
14620 FL_PRM$ = FL_DEF$
14630 ELSE
14640 FL_PRM$ = "*.*"
14650 ENDIF
14660 ENDIF
14670 '
14680 'cls
14690 IF FL_PRM$ = "cls" OR FL_PRM$ = "CLS" THEN
14700 CLS 1
14710 GOTO *FL_NAME2
14720 ENDIF
14730 '
14740 'help
14750 IF FL_PRM$ = "help" OR FL_PRM$ = "HELP" OR FL_PRM$ = "?" THEN
14760 PRINT "---------------------------------------------------"
14770 PRINT " (*,?)を含む files"
14780 PRINT " drv: ドライブ変更"
14790 PRINT " [drv:]dir\ カレント変更 & files"
14800 PRINT " DIR [drv:]dir files"
14810 PRINT " CD [drv:]dir カレント変更"
14820 PRINT " DEL fname 削除"
14830 PRINT " REN fname fname リネーム"
14840 PRINT " TYPE fname ファイル表示"
14850 PRINT " CLS 画面消去"
14860 PRINT " HELP この表示"
14870 PRINT "---------------------------------------------------"
14880 PRINT " '-' のみの入力でファイル名入力を中断できます."
14890 PRINT " '\' の代わりに '/' を使って入力できます."
14900 PRINT " DEL, REN に ワイルドカードは使えません."
14910 PRINT " TYPE 表示中に [S] [SPACE] でポーズ, [P] [RET] でページストップ,"
14920 PRINT " [Q] [C] [ESC] で中断することができます."
14930 PRINT " カレントの変更は,ドライブ名を含めて指定できます."
14940 PRINT " ファイル名指定に '*','?' が含まれていると,該当のディレクトリを表示します."
14950 GOTO *FL_NAME2
14960 ENDIF
14970 '
14980 'del fname
14990 IF FL_PRM$ = "del" OR FL_PRM$ = "DEL" THEN
15000 GOSUB *FL_PRM
15010 GOSUB *FL_TGFILE
15020 GOSUB *FL_EXIST
15030 IF FL_EXIST = 1 THEN
15040 ON ERROR GOTO *FL_DEL_ER
15050 KILL FL_NAME$
15060 ON ERROR GOTO 0
15070 ELSE
15080 PRINT "ファイルがみつかりません."
15090 ENDIF
15100 GOTO *FL_NAME2
15110 ENDIF
15120 '
15130 'ren fname fname
15140 IF FL_PRM$ = "ren" OR FL_PRM$ = "REN" THEN
15150 GOSUB *FL_PRM : GOSUB *FL_TGFILE
15160 FL_OLD$ = FL_NAME$
15170 GOSUB *FL_PRM : GOSUB *FL_TGFILE
15180 'if fl_prm$ <> "" then
15190 ON ERROR GOTO *FL_REN_ER
15200 NAME FL_OLD$ AS FL_NAME$
15210 ON ERROR GOTO 0
15220 'ENDIF
15230 GOTO *FL_NAME2
15240 ENDIF
15250 '
15260 'type
15270 IF FL_PRM$ = "type" OR FL_PRM$ = "TYPE" THEN
15280 GOSUB *FL_PRM
15290 GOSUB *FL_TGFILE
15300 GOSUB *FL_TYPE
15310 GOTO *FL_NAME2
15320 ENDIF
15330 '
15340 'a: ドライブ変更
15350 IF LEN(FL_PRM$) = 2 AND RIGHT$(FL_PRM$,1) = ":" THEN
15360 FL_NAME$ = FL_PRM$ + ".\"
15370 GOSUB *FL_DIR_CK
15380 IF FL_EXIST = 1 THEN
15390 FL_CDRV$ = FL_PRM$
15400 FL_CDIR$ = ".\"
15410 ELSE
15420 PRINT "ドライブの指定が違います."
15430 ENDIF
15440 GOTO *FL_NAME2
15450 ENDIF
15460 '
15470 '
15480 'cd\ , cd.. -> cd \ , cd ..
15490 IF FL_PRM$ = "cd\" OR FL_PRM$ = "CD\" OR FL_PRM$ = "cd.." OR FL_PRM$ = "CD.." THEN
15500 FL_CLINE$ = MID$(FL_PRM$,3)
15510 FL_PRM$ = "cd"
15520 ENDIF
15530 '
15540 'cd dir
15550 IF FL_PRM$ = "cd" OR FL_PRM$ = "CD" THEN
15560 GOSUB *FL_PRM
15570 IF FL_PRM$ <> "" THEN
15580 IF RIGHT$(FL_PRM$,1) <> "\" THEN FL_PRM$ = FL_PRM$ + "\"
15590 GOSUB *FL_CDCHG
15600 ELSE
15610 PRINT FL_CDRV$+FL_CDIR$
15620 ENDIF
15630 GOTO *FL_NAME2
15640 ENDIF
15650 '
15660 'dir\ ディレクトリ変更 & files
15670 IF RIGHT$(FL_PRM$,1) = "\" THEN
15680 GOSUB *FL_CDCHG
15690 FL_PRM$ = "*.*"
15700 ENDIF
15710 '
15720 'dir
15730 IF FL_PRM$ = "dir" OR FL_PRM$ = "DIR" OR FL_PRM$ = "ls" THEN
15740 GOSUB *FL_PRM
15750 IF FL_PRM$ = "" THEN
15760 FL_PRM$ = "*.*"
15770 ENDIF
15780 GOSUB *FL_TGFILE
15790 ON ERROR GOTO *FL_DIR_ER
15800 FILES FL_NAME$
15810 ON ERROR GOTO 0
15820 GOTO *FL_NAME2
15830 ENDIF
15840 '
15850 'ファイル名に '*','?' が含まれる時 files
15860 FL_I = INSTR(FL_PRM$,"*") + INSTR(FL_PRM$,"?")
15870 IF FL_I <> 0 THEN
15880 GOSUB *FL_TGFILE
15890 ON ERROR GOTO *FL_DIR_ER
15900 FILES FL_NAME$
15910 ON ERROR GOTO 0
15920 ' 空き容量等の表示を消す
15930 'locate 0,csrlin -1
15940 'print chr$(13)+space$(78)+chr$(13);
15950 'locate 0,csrlin -1
15960 'print chr$(13)+space$(78)+chr$(13);
15970 GOTO *FL_NAME2
15980 ENDIF
15990 '
16000 '-' 中止確認
16010 IF FL_PRM$ = "-" THEN
16020 FL_NAME$ = "-"
16030 GOTO *FL_NAME_T
16040 ENDIF
16050 '
16060 ' ファイル確認,終了処理
16070 GOSUB *FL_TGFILE
16080 GOSUB *FL_EXIST
16090 IF FL_RDWT = 0 THEN ' 読み込みのとき ファイル存在確認
16100 IF FL_EXIST = 0 THEN
16110 PRINT "指定のファイルはみつかりません."
16120 GOTO *FL_NAME2
16130 ENDIF
16140 ELSE ' 書き込みの時 同名ファイルをリネーム
16150 IF FL_EXIST = 1 THEN
16160 'ファイル名のみ切り出す
16170 FL_I = INSTR(FL_NAME$,"\") ' '\'があるか
16180 IF FL_I <> 0 THEN 'あり
16190 FL_I = LEN(FL_NAME$) -1
16200 WHILE MID$(FL_NAME$,FL_I,1) <> "\"
16210 FL_I = FL_I -1
16220 WEND
16230 FL_BAK$ = MID$(FL_NAME$,FL_I+1)
16240 ELSE
16250 FL_BAK$ = FL_NAME$
16260 ENDIF
16270 FL_I = INSTR(FL_BAK$,".")
16280 IF FL_I = 0 THEN
16290 FL_BAK$ = FL_BAK$ + ".bak" '拡張子なし
16300 ELSE
16310 FL_BAK$ = LEFT$(FL_BAK$,FL_I-1)+".bak" '拡張子を変更
16320 ENDIF
16330 ON ERROR GOTO *FL_SKIP
16340 KILL FL_BAK$
16350 ON ERROR GOTO 0
16360 NAME FL_NAME$ AS FL_BAK$
16370 ENDIF
16380 ENDIF
16390 IF LEFT$(FL_NAME$,2) = ".\" THEN
16400 FL_NAME$ = MID$(FL_NAME$,3)
16410 ENDIF
16420 *FL_NAME_T
16430 RETURN
16440 '
16450 '-- file_sub ---
16460 *FL_SKIP
16470 RESUME NEXT '削除cancel
16480 '
16490 *FL_TGFILE
16500 ' 対象ファイル名を fl_name$ にセット
16510 ' in fl_prm$ (fl_cdrv$,fl_cdir$) out fl_name$
16520 'drv
16530 IF MID$(FL_PRM$,2,1) <> ":" THEN
16540 FL_NAME$ = FL_CDRV$
16550 ELSE
16560 FL_NAME$ = LEFT$(FL_PRM$,2)
16570 FL_PRM$ = MID$(FL_PRM$,3)
16580 ENDIF
16590 'dir
16600 IF LEFT$(FL_PRM$,1) = "\" THEN ' フルパス指定
16610 FL_NAME$ = FL_NAME$ + FL_PRM$
16620 ELSE IF LEFT$(FL_PRM$,3) = "..\" THEN ' 上ディレクトリ
16630 FL_I = INSTR(LEFT$(FL_CDIR$,LEN(FL_CDIR$)-1),"\") ' '\'が二つ以上か確認
16640 IF FL_I <> 0 THEN
16650 FL_I = LEN(FL_CDIR$) -1
16660 WHILE MID$(FL_CDIR$,FL_I,1) <> "\"
16670 FL_I = FL_I -1
16680 WEND
16690 'fl_cdir$ = left$(fl_cdir$,fl_i)
16700 FL_NAME$ = FL_NAME$ + LEFT$(FL_CDIR$,FL_I) + MID$(FL_PRM$,4)
16710 ELSE
16720 FL_NAME$ = FL_NAME$ + FL_CDIR$ + FL_PRM$
16730 ENDIF
16740 ELSE ' カレント+指定
16750 IF FL_CDRV$ = FL_NAME$ THEN
16760 FL_NAME$ = FL_NAME$ + FL_CDIR$ + FL_PRM$
16770 ELSE
16780 FL_NAME$ = FL_NAME$ + FL_PRM$
16790 ENDIF
16800 ENDIF
16810 RETURN
16820 '
16830 *FL_CDCHG
16840 ' ディレクトリ確認, 更新
16850 ' in fl_prm$ (fl_cdir$,fl_cdrv$) out fl_cdir$, fl_cdrv$
16860 GOSUB *FL_TGFILE
16870 ' ディレクトリ存在確認
16880 GOSUB *FL_DIR_CK
16890 IF FL_EXIST = 1 THEN
16900 IF MID$(FL_NAME$,2,1) = ":" THEN
16910 FL_CDRV$ = LEFT$(FL_NAME$,2)
16920 FL_NAME$ = MID$(FL_NAME$,3)
16930 ENDIF
16940 FL_CDIR$ = FL_NAME$
16950 ELSE
16960 PRINT "ディレクトリの指定が違います."
16970 ENDIF
16980 RETURN
16990 '
17000 *FL_PRM
17010 ' fl_cline$ より 1項目 取り出す
17020 ' in fl_cline$ out fl_prm$ ,fl_cline$
17030 IF FL_CLINE$ <>"" THEN
17040 WHILE LEFT$(FL_CLINE$,1) = " "
17050 FL_CLINE$ = MID$(FL_CLINE$,2)
17060 WEND
17070 FL_I = INSTR(FL_CLINE$," ")
17080 IF FL_I <> 0 THEN
17090 FL_PRM$ = LEFT$(FL_CLINE$,FL_I-1)
17100 FL_CLINE$ = MID$(FL_CLINE$,FL_I+1)
17110 ELSE
17120 FL_PRM$ = FL_CLINE$
17130 FL_CLINE$ = ""
17140 ENDIF
17150 WHILE LEFT$(FL_CLINE$,1) = " "
17160 FL_CLINE$ = MID$(FL_CLINE$,2)
17170 WEND
17180 ELSE
17190 FL_PRM$ = ""
17200 ENDIF
17210 RETURN
17220 '
17230 *FL_TYPE
17240 ' ファイル内容表示 255文字以上は切捨て
17250 'in fl_name$
17260 FL_CNT = -1
17270 GOSUB *FL_EXIST
17280 IF FL_EXIST = 1 THEN
17290 OPEN "I",#9,FL_NAME$
17300 FL_BRK = 0: FL_CNT = -1
17310 WHILE EOF(9) = 0 AND FL_BRK = 0
17320 LINE INPUT #9,FL_I$
17330 PRINT FL_I$
17340 FL_I$ = INKEY$
17350 FL_CNT = FL_CNT + (FL_CNT>0)
17360 IF FL_CNT = 0 THEN FL_I$ = "p"
17370 IF FL_I$ = "" THEN
17380 ELSE IF INSTR("QqCc"+CHR$(27),FL_I$) THEN
17390 FL_BRK = 1
17400 ELSE IF INSTR("PpSs "+CHR$(13),FL_I$) THEN
17410 FL_I$ = INPUT$(1)
17420 IF INSTR("Pp"+CHR$(13),FL_I$) THEN
17430 FL_CNT = 22
17440 ELSE IF INSTR("QqCc"+CHR$(27),FL_I$) THEN
17450 FL_BRK = 1
17460 ELSE
17470 FL_CNT = -1
17480 ENDIF
17490 ENDIF
17500 WEND
17510 CLOSE #9
17520 ELSE
17530 PRINT "ファイルがみつかりません."
17540 ENDIF
17550 RETURN
17560 '
17570 *FL_EXIST
17580 'ファイル存在確認
17590 'in fl_name$ out fl_exist 1 ..ファイルあり 0 .. ファイルなし
17600 FL_EXIST = 1
17610 'print "f_EXIST ";fl_name$
17620 ON ERROR GOTO *FL_EXIST3
17630 OPEN "I",#9,FL_NAME$
17640 CLOSE #9
17650 *FL_EXIST2
17660 ON ERROR GOTO 0
17670 RETURN
17680 *FL_EXIST3
17690 IF ERR = 63 OR ERR = 75 OR ERR = 55 THEN
17700 FL_EXIST = 0
17710 ELSE
17720 PRINT ERR,ERL
17730 ENDIF
17740 RESUME *FL_EXIST2
17750 '
17760 *FL_DIR_CK
17770 ' ディレクトリ存在確認
17780 ' in fl_name$ out fl_exist
17790 FL_EXIST = 0
17800 ON ERROR GOTO *FL_DIR_CK_3
17810 OPEN "O",#9,FL_NAME$+"nul" :CLOSE #9
17820 *FL_DIR_CK_2
17830 ON ERROR GOTO 0
17840 RETURN
17850 *FL_DIR_CK_3
17860 IF ERR = 72 THEN
17870 PRINT "指定されたディスク装置が使用可能な状態になっていません."
17880 ELSE IF ERR = 75 THEN
17890 PRINT "デバイスまたはファイルのアクセスが拒否されました."
17900 ELSE IF ERR = 63 THEN
17910 'print "指定のディレクトリがみつかりません."
17920 ELSE IF ERR = 64 OR ERR = 73 THEN
17930 FL_EXIST = 1
17940 ELSE IF ERR = 55 THEN
17950 'ファイルの記述に誤りがあります
17960 ELSE
17970 PRINT ERR,ERL
17980 STOP
17990 ENDIF
18000 RESUME *FL_DIR_CK_2
18010 ' 63 指定のファイルがみつかりません
18020 ' 64 指定のファイルはすでに存在しています
18030 ' 72 指定されたディスク装置が使用可能な状態になっていません
18040 ' 73 指定されたディスクは書き込みが禁止されています
18050 ' 75 デバイスまたはファイルのアクセスが拒否されましてた
18060 ' 55 ファイルの記述に誤りがあります
18070 '
18080 '-- 各エラー処理 --
18090 *FL_DIR_ER
18100 PRINT "ファイルがみつかりません."
18110 RESUME NEXT
18120 '
18130 *FL_DEL_ER
18140 PRINT "ファイルを削除できません."
18150 RESUME NEXT
18160 '
18170 *FL_REN_ER
18180 PRINT "ファイル名が重複しているか, またはファイルがみつかりません."
18190 RESUME NEXT
18200 '